#ifndef SESSIONFRIENDAREA_H
#define SESSIONFRIENDAREA_H

#include <QWidget>
#include <QScrollArea>
#include <QScrollBar>
#include <QVBoxLayout>
#include <QPushButton>
#include <QGridLayout>
#include <QLabel>
#include <QStyleOption>
#include <QPainter>
#include "userinfowidget.h"

/**********************************************************************************************
 * 中间窗口的会话 中间滚动区域
 **********************************************************************************************/

//几种Item的类型
enum ItemType
{
    SESSIONITEM_TYPE,
    FRIENDITEM_TYPE,
    APPLYITEM_TYPE
};

//采用QScrollArea实现滚动条效果
class SessionFriendArea : public QScrollArea
{
    Q_OBJECT
public:
    explicit SessionFriendArea(QWidget *parent = nullptr);

    void clear();
    void addItem(const ItemType itemType,const QString id,const QIcon& avatar,const QString name,const QString text);

    void clickItem(int index);
private:
    QWidget* container;
    QVBoxLayout* vlayout;

signals:
};




/**********************************************************************************************
 * 滚动区域中的列表元素基类
 **********************************************************************************************/
class SessionFriendItem : public QWidget
{
    Q_OBJECT
public:
    SessionFriendItem(QWidget* owner,const QIcon& avatar,const QString name,const QString lastMessage);
    void paintEvent(QPaintEvent* event) override;
    void mousePressEvent(QMouseEvent* event) override;
    void enterEvent(QEnterEvent* event) override;
    void leaveEvent(QEvent* event) override;

    void select();
public:
    virtual void active();


protected:
    //存放SessionFriendArea的指针
    //this->parent()获取到的是container,不方便
    QWidget* owner;
    bool isSelect;
    //区域中Widget的成员
    QPushButton* avatarBtn;
    QLabel* nameLabel;
    QLabel* messageLabel;

signals:
};



/**********************************************************************************************
 * 滚动区域中的会话列表元素
 **********************************************************************************************/
class SessionItem : public SessionFriendItem
{
    Q_OBJECT
public:
    SessionItem(QWidget* owner,const QString& chatSessionId,const QIcon& avatar,const QString name,const QString lastMessage);
    void active() override;

    void updateLastMessage(const QString& chatSessionId);
private:
    QString chatSessionID;  //会话ID
    QString text;           //最后一条消息预览

};


/**********************************************************************************************
 * 滚动区域中的好友列表元素
 **********************************************************************************************/
class FriendItem : public SessionFriendItem
{
    Q_OBJECT
public:
    FriendItem(QWidget* owner,const QString& userID,const QIcon& avatar,const QString name,const QString description);
    void active() override;
private:
    QString userID;

};

/**********************************************************************************************
 * 滚动区域中的好友申请列表元素
 **********************************************************************************************/
class ApplyItem : public SessionFriendItem
{
    Q_OBJECT
public:
    ApplyItem(QWidget* owner,const QString& applyID,const QIcon& avatar,const QString name);

    void active() override;
    void agreeFriendApply();
    void rejectFriendApply();
private:
    QString applyID;
};

#endif // SESSIONFRIENDAREA_H

